package com.mhys.ynnz_ssm.business.sys.service.impl;

import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.mhys.ynnz_ssm.business.sys.dto.FileDO;
import com.mhys.ynnz_ssm.business.sys.service.FileService;
import com.mhys.ynnz_ssm.core.dto.MyPager;
import com.mhys.ynnz_ssm.mybatis.dao.file.FileDao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.io.File;
import java.util.List;

/**
 * 文件业务实现层
 * 2024/6/13
 */
@Service
public class FileServiceImpl implements FileService {

    @Autowired
    private FileDao fileDao;


    @Override
    public int addFile(FileDO fileDO) {

        int i = fileDao.addFile(fileDO);

        return i;
    }

    @Override
    public FileDO getFileByID(String fileID) {

        FileDO fileDO = fileDao.getFileByID(fileID);

        return fileDO;
    }

    @Override
    public MyPager<FileDO> getFilePages(FileDO fileDO, MyPager pager) {

        // 1. 创建一个分页的信息对象!!!!!!!!改泛型！！！！！！
        MyPager<FileDO> resultPageData = new MyPager<>();

        // 2.使用pageHepler对象!!!!!!!!改泛型！！！！！！
        // 传入当前的页码和每页显示的行数
        Page<FileDO> page = PageHelper.startPage(pager.getPage(), pager.getSize());

        // 3. 调用一下不分页的sql !!!!!!!!改！！！！！！
        // 定义一个不分页的查询操作，返回值不用操作
        List<FileDO> list = fileDao.getFilePages(fileDO); // mybatis接口方法不要传入分页对象

        // 4. 获取分页的结果 !!!!!!!!改泛型！！！！！！
        List<FileDO> result = page.getResult(); // 分页的结果数据
        long total = page.getTotal(); // 数据的总行数

        // 5. 填充分页结果
        resultPageData.setPage(pager.getPage());
        resultPageData.setSize(pager.getSize());

        resultPageData.setTotal(total);
        resultPageData.setRows(result);


        return resultPageData;
    }

    @Override
    public int deleteFile(List<String> ids) {

        // 1.先删除数据库数据
        List<FileDO>  fileList = fileDao.getFileListByIDs(ids);

        // 2.再删除数据
        int len = fileDao.deleteFile(ids);

        //3.最后删除文件
        for(FileDO del_file : fileList){
            File needDelete = new File(del_file.getSavePath());

            needDelete.delete();
        }

        return len;
    }
}
